我们在写javascript的时候会遇见很多兼容问题,大部分是ie9以下浏览器和其他浏览器的区别。下面整理每次遇见的兼容问题。
我们常使用的兼容方法是if或者||符号

1、addEventListener和attachEvent 事件绑定

<!DOCTYPE html>
<html>
  <head>
    <title>事件绑定</title>
    <script>
      window.onload=function(){
        var oBtn=document.getElementById("btn1");
        if(oBtn.attachEvent){
          oBtn.attachEvent("onclick",function(){
            alert("a");
          });
          oBtn.attachEvent("onclick",function(){
            alert("b");
          });
        }else{
          oBtn.addEventListener("click",function(){
            alert("a")
          },false);
          oBtn.addEventListener("click",function(){
            alert("b")
          },false);
        }
      }
    </script>
  </head>
  <body>
    <input id="btn1" type="button" value="按钮">
  </body>
</html>

这样每次写的时候比较麻烦,我们可以把这个兼容性封装下,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>事件绑定封装</title>
    <script>
      function myAddEvent(obj,ev,fn){//obj代表绑定事件的元素,ev代表事件(比如click),fn代表执行的函数
        if(obj.attachEvent){
          obj.attachEvent("on"+ev,fn);
        }else{
          obj.addEventListener(ev,fn,false);
        }
      }
      window.onload=function(){
        var oBtn=document.getElementById("btn1");
        myAddEvent(oBtn,"click",function(){
          alert("a");
        });
        myAddEvent(oBtn,"click",function(){
          alert("b");
        });
      }
    </script>
  </head>
  <body>
    <input id="btn1" type="button" value="按钮">
  </body>
</html>

2、removeEventListener和detachEvent 删除事件

3、ev和event

示例:

<!DOCTYPE html>
<html>
  <head>
    <title>event兼容测试</title>
    <script>
      window.onload=function(){
        // document.onclick=function(ev){
        //   var oEvent=ev || event;
        //   console.log(oEvent);
        // }
        document.onclick=function(event){
          var oEvent=event || window.event;
          console.log(oEvent);
        }
      }
    </script>
  </head>
  <body>
  </body>
</html>

4、currentStyle(ie)和getComputedStyle(非ie)获取元素的当前样式封装

<!DOCTYPE html>
<html>
<head>
  <title>获取样式兼容写法</title>
  <script>
    function getStyle(obj,name){
      if(obj.currentStyle){
        return obj.currentStyle[name];
      }else{
        return getComputedStyle(obj)[name];
      }
    }
    window.onload=function(){
      oDiv=document.getElementById("div1");
      // alert(getStyle(oDiv,"width"));
      alert(getStyle(oDiv,"background"));
      // alert(getStyle(oDiv,"backgroundColor"))
    }
  </script>
</head>
<body>
  <div id="div1" style="width:100px; height:100px; background:#f00;"></div>
</body>
</html>

5、new XMLHttpRequest()和new ActiveXObject("Microsoft.XMLHTTP")封装一个get请求

function ajax(url,fnSucc,fnFaild){
  // 第一步:创建ajax对象
  if(window.XMLHttpRequest){
    var oAjax=new XMLHttpRequest();
  }else{
    var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
  }
  // 第二步:链接服务器
  // open(方法,文件名即地址,异步传输)
  oAjax.open("GET",url,true);
  // 第三步:发送请求
  oAjax.send();
  // 第四步:接收返回
  oAjax.onreadystatechange=function(){
    if(oAjax.readyState===4){//判断浏览器和服务器进行到哪一步了。4代表读取编译完成
      if(oAjax.status===200){//成功
        fnSucc(oAjax.responseText);//把成功结果传递给成功函数
      }else{
        if(fnFaild){
          fnFaild(oAjax.status);//把错误状态码传递给失败函数
        }
      }
    }
  }
}

调用

ajax("a.txt",function(str){
  alert(str);
},function(error){
  alert(error);
})

666888
334 声望10 粉丝

知其然且知其所以然。